/**
 * 测试工具函数
 */

/**
 * 创建日期对象的辅助函数
 * @param {string} dateString - 日期字符串
 * @returns {Date} Date对象
 */
export function createDate(dateString) {
  return new Date(dateString);
}

/**
 * 创建测试用的请假时间范围
 * @param {string} start - 开始时间字符串
 * @param {string} end - 结束时间字符串
 * @returns {Object} 包含startTime和endTime的对象
 */
export function createTimeRange(start, end) {
  return {
    startTime: new Date(start),
    endTime: new Date(end)
  };
}

/**
 * 创建测试用的节假日数组
 * @param {Array<string>} dates - 日期字符串数组
 * @returns {Array<Date>} Date对象数组
 */
export function createHolidays(dates) {
  return dates.map(date => new Date(date));
}

/**
 * 验证请假计算结果的辅助函数
 * @param {Object} result - 计算结果
 * @param {number} expectedDays - 预期天数
 * @param {number} expectedHours - 预期小时数
 * @param {string} expectedType - 预期请假类型
 */
export function expectLeaveResult(result, expectedDays, expectedHours, expectedType) {
  expect(result.days).toBe(expectedDays);
  expect(result.hours).toBe(expectedHours);
  if (expectedType) {
    expect(result.leaveType).toBe(expectedType);
  }
}

/**
 * 常用的测试数据
 */
export const testData = {
  // 标准工作日时间范围
  workDayRange: {
    startTime: new Date('2025-06-03T14:50:00'), // 周二
    endTime: new Date('2025-06-04T14:50:00')    // 周三
  },
  
  // 周末时间范围
  weekendRange: {
    startTime: new Date('2025-06-07T14:50:00'), // 周六
    endTime: new Date('2025-06-08T14:50:00')    // 周日
  },
  
  // 同一天时间范围
  sameDayRange: {
    startTime: new Date('2025-06-03T09:00:00'),
    endTime: new Date('2025-06-03T17:00:00')
  },
  
  // 半天时间范围
  halfDayRange: {
    startTime: new Date('2025-06-03T09:00:00'),
    endTime: new Date('2025-06-03T13:00:00')
  },
  
  // 常用节假日
  commonHolidays: [
    new Date('2025-06-04'),
    new Date('2025-06-05')
  ],
  
  // 自定义请假规则
  customLeaveRules: {
    flexible: { minUnit: 0.25, deductWeekend: false, deductHoliday: false },
    strict: { minUnit: 1, deductWeekend: true, deductHoliday: true }
  }
}; 